home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Varios Español
/
Varios Español.iso
/
DBASE5
/
SAMPLES.ZIP
/
PAISANOS.FRG
< prev
next >
Wrap
Text File
|
1994-10-12
|
8KB
|
390 lines
* Programa...........: C:\DBASE20\EJEMPLOS\PAISANOS.FRG
* Fecha..............: 2-23-93
* Versión............: dBASE IV, Informes 2.0
*
* Notas:
* ------
* Antes de ejecutar este procedimiento con el mandato DO
* es necesario usar LOCATE, pues la sentencia CONTINUE
* está en el bucle principal.
*
*-- Parámetros
PARAMETERS gl_noeject, gl_plain, gl_summary, gc_heading, gc_extra
** Los tres primeros parámetros son de tipo lógico
** El cuarto es una serie y el quinto es un parámetro adicional.
PRIVATE _peject, _wrap
*-- Comprueba si no se ha encontrado ningún registro
IF EOF() .OR. .NOT. FOUND()
RETURN
ENDIF
*-- Desactiva la justificación entre márgenes.
_wrap=.F.
IF _plength < (_pspacing * 4 + 1) + 1 + 2
SET DEVICE TO SCREEN
DEFINE WINDOW gw_report FROM 7,17 TO 11,62 DOUBLE
ACTIVATE WINDOW gw_report
@ 0,1 SAY "Aumente la longitud de página del informe."
@ 2,1 SAY "Pulse una tecla ..."
x=INKEY(0)
DEACTIVATE WINDOW gw_report
RELEASE WINDOW gw_report
RETURN
ENDIF
_plineno=0 && pone el número de líneas a cero
*-- Parámetro NOEJECT
IF gl_noeject
IF _peject="BEFORE"
_peject="NONE"
ENDIF
IF _peject="BOTH"
_peject="AFTER"
ENDIF
ENDIF
*-- Establecimiento de entorno
ON ESCAPE DO Prnabort
IF SET("TALK")="ON"
SET TALK OFF
gc_talk="ON"
ELSE
gc_talk="OFF"
ENDIF
gc_space=SET("SPACE")
SET SPACE OFF
gc_time=TIME() && Tiempo del sistema para el campo predefinido
gd_date=DATE() && Fecha del sistema " " " "
gl_fandl=.F. && indicador de primera y última página
gl_prntflg=.T. && indicador de continuar impresión
gl_widow=.T. && indicador de comprobar apartados viudos
gn_length=LEN(gc_heading) && almacena la longitud del encabezamiento (HEADING)
gn_level=2 && apartado actual en proceso
gn_page=_pageno && captura el número de página actual
gn_pspace=_pspacing && captura el interlineado de la página impresa actual
*-- Activa el procedimiento para el salto de página
gn_atline=_plength - 1
ON PAGE AT LINE gn_atline EJECT PAGE
*-- Imprime el informe
PRINTJOB
*-- Inicializa las variables del cambio de grupo
r_mvar4=PROVINCIA
*-- Inicializa las variables del resumen.
r_msum1=0
r_msum2=0
IF gl_plain
ON PAGE AT LINE gn_atline DO Pgplain
ELSE
ON PAGE AT LINE gn_atline DO Pgfoot
ENDIF
DO Pghead
gl_fandl=.T. && comienzo de la primera página física
DO Rintro
DO Grphead
*-- Bucle de fichero
DO WHILE FOUND() .AND. .NOT. EOF() .AND. gl_prntflg
DO CASE
CASE PROVINCIA <> r_mvar4
gn_level=4
OTHERWISE
gn_level=0
ENDCASE
*-- comprueba si alguna expresión no ha casado
IF gn_level <> 0
DO Grpfoot WITH 100-gn_level
DO Grpinit
ENDIF
*-- Repite las introducciones de grupo
IF gn_level <> 0
DO Grphead
ENDIF
gn_level=0
*-- Cuerpo del informe
IF gl_summary
DO Upd_Vars
ELSE
DO __Detail
ENDIF
gl_widow=.T. && activa la comprobación de apartados viudos
CONTINUE
ENDDO
IF gl_prntflg
gn_level=3
DO Grpfoot WITH 97
DO Rsumm
ELSE
gn_level=3
DO Rsumm
DO Reset
RETURN
ENDIF
ON PAGE
ENDPRINTJOB
DO Reset
RETURN
* EOP: C:\DBASE20\EJEMPLOS\PAISANOS.FRG
*-- Determina la altura de los Apartados de Grupo y de informe por si hay apartados viudos
FUNCTION Gheight
PARAMETER Group_Band
retval=0 && Valor devuelto
IF Group_Band <= 4
retval = retval + 3 * gn_pspace
ENDIF
*-- suma la altura del Apartado del cuerpo del informe
retval = retval + 3 * gn_pspace
RETURN retval
* EOP: Gheight
*-- Actualiza los campos resumen y/o los campos calculados.
PROCEDURE Upd_Vars
*-- Contador
r_msum1=r_msum1+1
*-- Contador
r_msum2=r_msum2+1
RETURN
* EOP: Upd_Vars
*-- Desactiva el indicador para salir del bucle DO WHILE cuando se pulse ESC
PROCEDURE Prnabort
gl_prntflg=.F.
RETURN
* EOP: Prnabort
*-- Reinicializa las variables de cambio de grupo, y los campos
*-- resumen que vuelvan a empezar el cálculo cada apartado particular.
PROCEDURE Grpinit
IF gn_level <= 4
r_msum1=0
ENDIF
IF gn_level <= 4
r_mvar4=PROVINCIA
ENDIF
RETURN
* EOP: Grpinit
*-- Procesa la Introducción de los grupos al cambiar de grupo
PROCEDURE Grphead
IF EOF()
RETURN
ENDIF
PRIVATE _pspacing
_pspacing=gn_pspace
IF gn_level = 0
gn_level=50
ENDIF
IF gn_level = 4
IF 3 * gn_pspace < gn_atline
IF (gl_widow .AND. _plineno+Gheight(4) > gn_atline + 1) ;
.OR. (gl_widow .AND. _plineno+3 * gn_pspace > gn_atline)
EJECT PAGE
ENDIF
ENDIF
ENDIF
IF gn_level <= 4
DO Head4
ENDIF
gn_level=0
RETURN
* EOP: Grphead.PRG
*-- Procesa el Apartado de Resumen de Grupos al cambiar de grupos
PROCEDURE Grpfoot
PARAMETER ln_level
IF ln_level >= 96
DO Foot96
ENDIF
RETURN
* EOP: Grpfoot.PRG
PROCEDURE Pghead
PRIVATE ll_heading, ln_width
ll_heading = .T.
ln_width = _rmargin - _lmargin
IF _wrap
PRIVATE _wrap
_wrap = .F.
ENDIF
?
*-- Parámetros para imprimir la cabecera - si no cabe en una línea
*-- El valor añadido a gn_length es la última columna de la primera línea dos veces
IF .NOT. gl_plain .AND. gn_length + 30 > ln_width
?? gc_heading FUNCTION "I;V"+LTRIM(STR(ln_width))
?
ll_heading = .F.
ENDIF
?? "Página Nº" AT 3,;
IIF(gl_plain,'',_pageno) PICTURE "99"
*-- Parámetros para imprimir la cabecera - si cabe en la primera línea
IF .NOT. gl_plain .AND. gn_length > 0 .AND. ll_heading
?? " "
?? gc_heading FUNCTION "I;V"+LTRIM(STR(ln_width-(_pcolno*2)))
ENDIF
?
IF .NOT. gl_plain
?? gd_date AT 3
?
ENDIF
?
RETURN
* EOP: Pghead
PROCEDURE Rintro
PRIVATE _indent, _lmargin, _rmargin, _tabs
IF .NOT. _wrap
PRIVATE _wrap
_wrap = .T.
ENDIF
?
_lmargin=0
_indent=0
_rmargin=254
_pcolno=0
_tabs=;
"8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168";
+ ",176,184,192,200,208,216,224,232,240";
?? " AGENDA DE DIRECCIONES"
?
?
?
_pcolno=0
?? " Organizada por Provincias"
?
_pcolno=0
?? " De la vista 'Invitado'"
?
?
?
_pcolno=0
EJECT PAGE
?
RETURN
* EOP: Rintro
PROCEDURE Head4
IF gn_level=1
RETURN
ENDIF
IF _wrap
PRIVATE _wrap
_wrap = .F.
ENDIF
?
?? "Amigos en " AT 7,;
Provincia FUNCTION "T" ,;
":"
?
?? "=================================================" AT 7
?
RETURN
PROCEDURE __Detail
IF _wrap
PRIVATE _wrap
_wrap = .F.
ENDIF
IF 3 * gn_pspace < gn_atline - (_pspacing * 4 + 1)
IF gl_widow .AND. _plineno+3 * gn_pspace > gn_atline + 1
EJECT PAGE
ENDIF
ENDIF
DO Upd_Vars
?
?? Nombre FUNCTION "T" AT 7,;
" " ,;
Apellido FUNCTION "T" ,;
Telefono FUNCTION "T" AT 41
?
?? Direccion FUNCTION "T" AT 7,;
Ciudad FUNCTION "T" AT 29,;
", " ,;
Provincia FUNCTION "T" ,;
Cod_post FUNCTION "T" AT 49
?
RETURN
* EOP: __Detail
PROCEDURE Foot96
IF _wrap
PRIVATE _wrap
_wrap = .F.
ENDIF
?
?? "-------------------------------------------------" AT 7
?
?? "Amigos en esta provincia: " AT 7,;
r_msum1 PICTURE "999"
?
?
RETURN
PROCEDURE Rsumm
IF _wrap
PRIVATE _wrap
_wrap = .F.
ENDIF
?
?? "-------------------------------------------------" AT 7
?
?? "Número de direcciones en la agenda: " AT 7,;
r_msum2 PICTURE "999"
gl_fandl=.F. && terminada la última página
?
RETURN
* EOP: Rsumm
PROCEDURE Pgfoot
PRIVATE _box
gl_widow=.F. && desactiva la comprobación de líneas viudas
EJECT PAGE
*-- comprueba si el número de página es mayor que el de la última página
IF _pageno > _pepage
GOTO BOTTOM
SKIP
gn_level=0
ENDIF
IF .NOT. gl_plain .AND. gl_fandl
_pspacing=gn_pspace
DO Pghead
ENDIF
RETURN
* EOP: Pgfoot
*-- Proceso de los saltos de página cuando se usa la opción PLAIN
PROCEDURE Pgplain
PRIVATE _box
EJECT PAGE
RETURN
* EOP: Pgplain
*-- Restaura el entorno de dBASE previo a la impresión del informe
PROCEDURE Reset
SET SPACE &gc_space.
SET TALK &gc_talk.
ON ESCAPE
ON PAGE
RETURN
* EOP: Reset